package com.leetcode.根据数据结构分类.数组;

/**
 * @author: ZhouBert
 * @date: 2021/1/8
 * @description: 189. 旋转数组
 * https://leetcode-cn.com/problems/rotate-array/
 */
public class B_189_旋转数组 {

	/**
	 * 旋转数组第一种解法
	 * 使用巧办法：
	 * 1.将数组进行倒置；
	 * 2.确定 index 的位置，将前后分别进行倒置
	 * 就是所求的答案
	 *
	 * @param nums
	 * @param k
	 */
	public void rotate1(int[] nums, int k) {
		k = k % nums.length;
		invert(nums, 0, nums.length - 1);
		invert(nums, 0, k - 1);
		invert(nums, k, nums.length - 1);
	}

	/**
	 * 将数组进行倒置
	 *
	 * @param nums
	 * @param begin
	 * @parem end
	 */
	public void invert(int[] nums, int begin, int end) {
		int tempValue = 0;
		while (begin >= 0 && end < nums.length && begin < end) {
			tempValue = nums[begin];
			nums[begin++] = nums[end];
			nums[end--] = tempValue;
		}
	}


	public static void main(String[] args) {
		int[] nums = new int[]{1, 2, 3, 4, 5, 6, 7};
		nums = new int[]{-1};
		B_189_旋转数组 action = new B_189_旋转数组();
		action.rotate1(nums, 2);
	}


}
